#include "ewindow.h"

Ewindow::Ewindow(int w,int h) : CWindow(w,h)
{
    Fl::scheme("gtk+");
    label("ElektroSoru");
    box(FL_PLASTIC_DOWN_BOX);

    menu =new Fl_Menu_Bar(0,-1,1024,21);
    menu->box(FL_PLASTIC_DOWN_BOX);
    menu->textcolor(FL_SELECTION_COLOR);
    menu->textfont(FL_BOLD+FL_ITALIC);
    menu->color(FL_SELECTION_COLOR);

    propencere=new EProperties(0,620,1024,148);

    propencere->end();

    list=new EPages(2,20,162,610);
    list->end();

    tool=new EToolBar(164,20,60,610);
    tool->color(FL_SELECTION_COLOR);
    //tool->color(FL_SELECTION_COLOR);
    tool->end();

    //board=new EBoard(204,20,w-204,620);
}

Ewindow::~Ewindow()
{
    //dtor
}

void Ewindow::ekleBoard(EBoard *p)
{
    aktifBoard=p;
    for(int i=0;i<boardTut.size();i++)
    {
        boardTut[i]->hide();
    }
    boardTut.push_back(p);
    this->add(p);
}

void Ewindow::aktifEt(int index)
{
    if(!boardTut.empty())
    {
        if(index<boardTut.size())
            aktifBoard=boardTut[index];
        else
            aktifBoard=boardTut[boardTut.size()-1];

        for(int i=0;i<boardTut.size();i++)
        {
            boardTut[i]->hide();
        }
        if(index>=0)
            aktifBoard->show();
    }
}
void Ewindow::kaldirBoard()
{
    EBoard *p;
    if(!boardTut.empty())
    {
        for(int i=0;i<boardTut.size();i++)
        {
            p=boardTut[i];
            if(aktifBoard==p)
            {
                std::vector<EBoard *>::iterator iter;
                iter=boardTut.begin()+i;
                boardTut.erase(iter);
            }
        }
    }
    if(aktifBoard)
        remove(aktifBoard);
    redraw();
    //delete p;
}
EToolBar * Ewindow::toolGonder()
{
    return tool;
}

std::string Ewindow::yazdir()
{
    char dizi[15]={'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o'};
    EBoard *bgecici;
    eContainer *topgecici;
    std::stringstream dosya;
    std::stringstream degisken;
    std::vector<int>dogrucevap;
    int kontrol=0;
    dosya<<"elektro_";
    dosya<<propencere->haritagonder()->value()<<"-"<<propencere->odagonder()->value()<<".gat,";
    degisken<<"oda_"<<propencere->haritagonder()->value()<<"_"<<propencere->odagonder()->value()<<"_";
    dosya<<list->sirala(propencere->coordxgonder()->value());
    dosya<<","<<list->sirala(propencere->coordygonder()->value());
    dosya<<","<<propencere->yongonder()->value()<<"\tscript\t"<<propencere->npcisimgonder()->value()<<"\t"<<propencere->npcresimgonder()->value()<<",{\n";
    dosya<<"\tif("<<degisken.str()<<"u_gorev==0) goto GOREV;\n";
    dosya<<"\tif("<<degisken.str()<<propencere->npcisimgonder()->value()<<"==1) goto SORMA;\n\n";
    dosya<<"\tset @totalquestion,"<<list->sorusayisi()<<";\n";
    dosya<<"\tset @successlimit,"<<propencere->barajgonder()->value()<<";\n";
    dosya<<"\tset oda_"<<propencere->haritagonder()->value()<<"_"<<propencere->odagonder()->value()<<"_"<<propencere->npcisimgonder()->value()<<"_sorus, @totalquestion;\n";
    dosya<<"\tcallfunc \"teststarter\";\n";
    dosya<<"\tcallfunc \"windowpro\","<<propencere->genisgonder()->value()<<","<<propencere->yuksekgonder()->value()<<",";
    dosya<<propencere->solgonder()->value()<<","<<propencere->ustgonder()->value()<<";\n";
    dosya<<"\tcallfunc \"testpro\",@totalquestion,"<<propencere->ToplamZamangonder()->value()<<","<<propencere->odulgonder()->value()<<",";
    dosya<<propencere->cezagonder()->value()<<","<<propencere->barajgonder()->value()<<";\n";
    dosya<<"\tcallfunc \"teststarter_\";\n";
    dosya<<"menu\n";
    dosya<<"\t\"quit\",CANCEL,\n\t\"start\",s1;\n\n";
    for(int i=0;i<boardTut.size();i++)
    {
        bgecici=boardTut[i];
        dosya<<"s"<<i+1<<":\n";
        dosya<<"\tcallfunc \"testquestion\",\""<<i+1<<"\",\"radio\","<<propencere->npcisimgonder()->value()<<"_s"<<i+1<<";\n\n";
        for(int j=0;j<bgecici->metinTut.size();j++)
        {
            topgecici=bgecici->metinTut[j];
            Fl_Multiline_Input *kutumetin=(Fl_Multiline_Input *)topgecici->icerikgonder();
            dosya<<"\tcallfunc \"textbox\","<<topgecici->xxgonder()<<","<<topgecici->yygonder()<<","<<topgecici->genislikgonder()<<","<<topgecici->yukseklikgonder()<<",";
            dosya<<topgecici->bkirmizigonder()<<","<<topgecici->byesilgonder()<<","<<topgecici->bmavigonder()<<", 1,"<<topgecici->dikeygonder()<<","<<topgecici->yataygonder()<<";\n";
            std::string gecici=kutumetin->value();
            std::string istetme;
            for(int j=0;j<gecici.length();j++)
            {
                if(gecici[j]=='\n')
                {
                    dosya<<"\t\tcallfunc \"addrow\",\""<<istetme<<" \";\n";
                    istetme.clear();
                }
                else if(j==gecici.length()-1)
                {
                    istetme+=gecici[j];
                    dosya<<"\t\tcallfunc \"addrow\",\""<<istetme<<" \";\n";
                    istetme.clear();
                }
                else
                {
                    istetme+=gecici[j];
                }
            }
            dosya<<"\tcallfunc \"textbox_\";\n";
        }
        dosya<<"\n";
        for(int j=0;j<bgecici->labelTut.size();j++)
        {
            topgecici=bgecici->labelTut[j];
            dosya<<"\tcallfunc \"label\","<<topgecici->xxgonder()<<","<<topgecici->yygonder()<<",\""<<topgecici->metingonder()<<"\",";
            dosya<<topgecici->fonttextgonder()<<","<<topgecici->genislikgonder()<<","<<topgecici->yukseklikgonder()<<",";
            dosya<<topgecici->fkirmizigonder()<<","<<topgecici->fyesilgonder()<<","<<topgecici->fmavigonder()<<",";
            dosya<<topgecici->bkirmizigonder()<<","<<topgecici->byesilgonder()<<","<<topgecici->bmavigonder()<<",1;\n";
        }
        dosya<<"\n";
        for(int j=0;j<bgecici->animTut.size();j++)
        {
            topgecici=bgecici->animTut[j];
            dosya<<"\tcallfunc \"anim\","<<topgecici->xxgonder()<<","<<topgecici->yygonder()<<",";
            dosya<<topgecici->genislikgonder()<<","<<topgecici->yukseklikgonder()<<",\""<<topgecici->metingonder()<<"\",";
            dosya<<topgecici->hizgonder()<<";\n";
        }
        dosya<<"\n";
        for(int j=0;j<bgecici->resimTut.size();j++)
        {
            topgecici=bgecici->resimTut[j];
            dosya<<"\tcallfunc \"image\","<<topgecici->xxgonder()<<","<<topgecici->yygonder()<<",\""<<topgecici->metingonder()<<"\";\n";
        }
        dosya<<"\n";
        for(int j=0;j<bgecici->radioTut.size();j++)
        {
            topgecici=bgecici->radioTut[j];
            Fl_Round_Button *radio=(Fl_Round_Button *)topgecici->icerikgonder();
            dosya<<"\tcallfunc \"radio\","<<topgecici->xxgonder()<<","<<topgecici->yygonder()<<",\""<<topgecici->metingonder()<<"\","<<j+1<<";\n";
            if(radio->value()==true)
                dogrucevap.push_back(j+1);
            else
            {
                kontrol++;
            }
        }
        if(kontrol==bgecici->radioTut.size())
        {
            std::stringstream mesaj;
            mesaj<<i+1<<"Numarali sorunun cevabi belirtilmemistir.";
            fl_message(mesaj.str().c_str());
        }
        kontrol=0;
        dosya<<"\n";
        dosya<<"\tcallfunc \"test_\";\n";
        dosya<<"\tmenu\n";
        dosya<<"\t\t\"iptal\",CANCEL,\n\t\t\"degerlendir\",DEGERLENDIR,\n";
        for(int j=0;j<boardTut.size();j++)
        {
            dosya<<"\t\t\""<<j+1<<"\","<<"s"<<j+1<<",\n";
        }
        for(int j=0;j<bgecici->radioTut.size();j++)
        {
            dosya<<"\t\t\""<<dizi[j]<<"\",s"<<i+1<<"_"<<dizi[j];
            if(j==bgecici->radioTut.size()-1)
                dosya<<";\n";
            else
                dosya<<",\n";
        }
        for(int j=0;j<bgecici->radioTut.size();j++)
        {
            dosya<<"\ts"<<i+1<<"_"<<dizi[j]<<":\n";
            dosya<<"\t\tset "<<propencere->npcisimgonder()->value()<<"_s"<<i+1<<","<<j+1<<";\n";
            dosya<<"\t\tgoto s"<<i+1<<";\n";
        }
    }
    dosya<<"DEGERLENDIR:\n";
    degisken<<propencere->npcisimgonder()->value();
    dosya<<"\tset "<<degisken.str()<<",1;\n";
    std::stringstream bossay;
    std::stringstream dogrusay;
    std::stringstream report;
    for(int i=0;i<dogrucevap.size();i++)
    {
        dosya<<"set "<<degisken.str()<<"_d"<<i+1<<", "<<dogrucevap[i]<<";\n";
        bossay<<"if ("<<degisken.str()<<"_s"<<i+1<<"==0) set @bos, (@bos+1);\n";
        dogrusay<<"if ("<<degisken.str()<<"_s"<<i+1<<" == "<<degisken.str()<<"_d"<<i+1<<") set @dogru, (@dogru+1);\n";
        report<<"\tcallfunc \"reportline\",\""<<i+1<<"\","<<degisken.str()<<"_d"<<i+1<<" ,"<<degisken.str()<<"_s"<<i+1<<";\n";
    }
    dosya<<bossay.str()<<dogrusay.str();
    dosya<<"set "<<degisken.str()<<"_dcev, @dogru;\n";
    dosya<<"set "<<degisken.str()<<"_bcev, @bos;\n";
    dosya<<"set @yanlis, @totalquestion - @dogru - @bos;\n";
    dosya<<"callfunc \"testreport\",@dogru, @yanlis, @bos;\n\n";
    dosya<<"\tif (@dogru>@succeslimit) goto ODUL;\n\tODUL_:";
    dosya<<"\tif (@dogru==@succeslimit) goto ODUL1;\n\tODUL1_:";
    dosya<<"\tif (@dogru<@succeslimit) goto ODUL2;\n\tODUL2_:";
    dosya<<report.str();
    dosya<<"\tcallfunc \"report_\";\n";
    dosya<<"\t\tmenu\n\t\t\"1\",CANCEL;\n\t\tCANCEL:\n\t\tclose;\n";
    dosya<<"ODUL:\n";
    dosya<<"\tgetitem 2086,1;\n\tcallfunc \"reportmesaj\",\"iyi gidiyor\";\n\tgoto ODUL_;\n";
    dosya<<"ODUL1:\n";
    dosya<<"\tgetitem 2086,1;\n\tcallfunc \"reportmesaj\",\"ucu ucuna kurtardın ;)\";\n\tgoto ODUL1_;\n";
    dosya<<"ODUL2:\n";
    dosya<<"\tgetitem 2086,1;\n\tcallfunc \"reportmesaj\",\"haydi haydi canlan biraz\";\n\tgoto ODUL2_;\n";
    dosya<<"SORMA:\n";
    dosya<<"\tcallfunc \"testmesaj\";\n";
    dosya<<"\tcallfunc \"addrow\",\"##3Benim sorumu daha once cevaplamıştın.\";\n";
    dosya<<"\tcallfunc \"addrow\",\"\";\n";
    dosya<<"\tcallfunc \"addrow\",\"##9Şimdi ##1Eğitim Kontrol Bilgisayarı##0na\";\n";
    dosya<<"\tcallfunc \"addrow\",\"gidip ne yapman gerektiğini\";\n";
    dosya<<"\tcallfunc \"addrow\",\"##3öğrenebilirsin.\";\n";
    dosya<<"\tcallfunc \"testmesaj_\";\n";
    dosya<<"\tclose;\n";
    dosya<<"GOREV:\n";
    dosya<<"\tcallfunc \"testmesaj\";\n";
	dosya<<"\tcallfunc \"addrow\", \"Bu odadaki görevlerini öğrenmek için\";\n";
	dosya<<"\tcallfunc \"addrow\", \"##1 Eğitim Kontrol Bilgisayarı' ##0 na gitmelisin.\";\n";
	dosya<<"\tcallfunc \"addrow\", \"Açılan görev penceresi neler yapman gerektiğini\";\n";
	dosya<<"\tcallfunc \"addrow\", \"anlatacak.  Görevleri bilgisayardan aldıktan sonra\";\n";
	dosya<<"\tcallfunc \"addrow\", \"Backspace tuşuna basarak görebilirsin.\";\n";
	dosya<<"\tcallfunc \"testmesaj_\";\n";
	dosya<<"\tclose;\n";
	dosya<<"}";
    return dosya.str();
}
EProperties *Ewindow::propenceregonder()
{
    return propencere;
}
void Ewindow::propertiesTimer(eContainer *p)
{
    if(p)
    {
        aktif=p;
        propencere->xxgonder()->value(p->xxgonder());
        propencere->yygonder()->value(p->yygonder());
        propencere->genislikgonder()->value(p->genislikgonder());
        propencere->yukseklikgonder()->value(p->yukseklikgonder());
        propencere->fmavigonder()->value(p->fmavigonder());
        propencere->fyesilgonder()->value(p->fyesilgonder());
        propencere->fkirmizigonder()->value(p->fkirmizigonder());
        propencere->bmavigonder()->value(p->bmavigonder());
        propencere->byesilgonder()->value(p->byesilgonder());
        propencere->bkirmizigonder()->value(p->bkirmizigonder());
        propencere->yataygonder()->value(p->yataygonder());
        propencere->metingonder()->value(p->metingonder().c_str());
        propencere->fontgonder()->value(p->fontgonder());
        propencere->hizgonder()->value(p->hizgonder());
    }
}
